package model;

import interfaz.IElemento;
import interfaz.IAtributoCompuesto;

import java.util.ArrayList;
import java.util.List;

public class Entidad implements IElemento,IAtributoCompuesto{
	
	private String nombre;
	private String tipo;
	private List<Atributo> listaAtributos;
	private List<AtributoCompuesto> listaAtributosCompuestos;
	
	
	/**
	 * Constructor por defecto
	 * para ser usado solamente por el constructor XML
	 */
	public Entidad(){		
	}
	
	public Entidad(String nombre){
		this.nombre = nombre;
		this.listaAtributos = new ArrayList<Atributo>();	
	}

	public String getIdentificator() {
		return nombre;
	}

	public void setIdentificator(String nombre) {
		this.nombre = nombre;
	}

	public List<Atributo> getListaAtributos() {
		return listaAtributos;
	}

	public List<AtributoCompuesto> getListaAtributosCompuestos() {
		if(this.listaAtributosCompuestos == null){
			this.crearListaDeAtributosCompuestos();
		}
		return listaAtributosCompuestos;
		
	}


	
	/**
	 * Se debe inicializar la lista de atributos compuestos fuera del constructor para que todos aquellos que no lo tengan no lo visualicen en el archivo xml.
	 */
	//TODO: Deberia ser privado accedido por el setListaDeAtributosCompuestos.
	public void crearListaDeAtributosCompuestos(){
	
		listaAtributosCompuestos = new ArrayList<AtributoCompuesto>();
		
	}
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public void setListaAtributos(List<Atributo> listaAtributos) {
		this.listaAtributos = listaAtributos;
	}

	public void setListaAtributosCompuestos(
			List<AtributoCompuesto> listaAtributosCompuestos) {
		this.crearListaDeAtributosCompuestos();
		this.listaAtributosCompuestos = listaAtributosCompuestos;
	}
	
	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	
	public boolean tieneIdentificador(){
		boolean tieneIdentificador = false;
		for (Atributo atributo : this.listaAtributos){
			if ( atributo.getEsPK()|| atributo.getEsFK()){
				tieneIdentificador =  true;
			}
		}
		
		if(this.listaAtributosCompuestos != null){
			for (AtributoCompuesto atributoCompuesto : this.listaAtributosCompuestos){
				if ( atributoCompuesto.getEsPK() || atributoCompuesto.getEsFK()){
					tieneIdentificador  = true;
				}
			}
		}
		
		return tieneIdentificador;
	
	}
}
